/**
 * 校园报投稿系统 - Cloudflare Workers 入口文件
 */

import { handleSubmissionAPI } from './handlers/apiHandler';
import { handleAdminAPI } from './handlers/adminHandler';
import { handleStaticAssets } from './handlers/staticHandler';
import { initDatabase } from './db/database';

// 数据库初始化状态
let databaseInitialized = false;
let databaseInitializationError = null;

// 初始化数据库
export async function initialize(env) {
  // 避免重复初始化
  if (databaseInitialized || databaseInitializationError) {
    return;
  }
  
  try {
    await initDatabase(env);
    databaseInitialized = true;
    console.log('数据库初始化成功');
  } catch (error) {
    databaseInitializationError = error;
    console.error('数据库初始化失败:', error);
  }
}

// Workers 主处理函数
export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);
    const path = url.pathname;
    
    // 初始化数据库（如果还未初始化）
    if (!databaseInitialized && !databaseInitializationError) {
      ctx.waitUntil(initialize(env));
    }
    
    try {
      // 特殊处理根路径
      if (path === '/') {
        try {
          return await handleStaticAssets(request, env);
        } catch (e) {
          // 如果静态资源处理失败，返回默认欢迎页面
          return new Response(`<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>校园报投稿系统</title>
</head>
<body>
    <h1>校园报投稿系统</h1>
    <p>欢迎使用校园报投稿系统！</p>
</body>
</html>`, {
            headers: {
              'Content-Type': 'text/html; charset=utf-8'
            }
          });
        }
      }
      
      // 静态资源处理
      if (path.startsWith('/static/') || 
          path.startsWith('/css/') || 
          path.startsWith('/js/') || 
          path.endsWith('.html') || 
          path.endsWith('.ico')) {
        return await handleStaticAssets(request, env);
      }
      
      // API 路由处理
      if (path.startsWith('/api/')) {
        // 管理员相关 API
        if (path.startsWith('/api/admin')) {
          return await handleAdminAPI(request, env);
        }
        
        // 投稿相关 API
        if (path.startsWith('/api/submissions')) {
          return await handleSubmissionAPI(request, env);
        }
        
        // 未找到的 API 路由
        return new Response(JSON.stringify({
          error: 'API 端点不存在',
          path: path
        }), {
          status: 404,
          headers: {
            'Content-Type': 'application/json'
          }
        });
      }
      
      // 管理员页面路由
      if (path.startsWith('/admin')) {
        // 保留原始路径，让 staticHandler 处理
        return await handleStaticAssets(request, env);
      }
      
      // 默认返回 404
      return new Response('页面未找到', {
        status: 404,
        headers: {
          'Content-Type': 'text/plain; charset=utf-8'
        }
      });
      
    } catch (error) {
      console.error('请求处理错误:', error);
      return new Response(JSON.stringify({
        error: '服务器内部错误',
        message: error.message || '未知错误'
      }), {
        status: 500,
        headers: {
          'Content-Type': 'application/json'
        }
      });
    }
  }
};